home *** CD-ROM | disk | FTP | other *** search
- BEGIN: JMP INITIALIZE
-
- HOURS DB 0
- MINUTES DB 0
- SECONDS DB 0
- OLD_INT_28 DW 0
- OLD_INT_28_2 DW 0
- VID_SEG DW 0B800
- POINTER DB 0
- SCR_BUFFER DB '00:00:00 pm'
- SCR_LEN DW $-OFFSET SCR_BUFFER
- BUSY DB 0
-
- GET_TIME: PUSH AX,BX,CX,DX,SI,DI,DS,ES
- PUSHF
- CLD
- PUSH CS
- POP DS
- PUSH CS
- POP ES
- CMP BUSY,1
- JNZ PASS_BUSY
- JMP QUICK_EXIT
-
- PASS_BUSY: MOV BUSY,1
- MOV AH,02C
- INT 021
- MOV HOURS,CH
- MOV MINUTES,CL
- MOV SECONDS,DH
- MOV DI,OFFSET SCR_BUFFER
-
- OPT_TIME: MOV DL,HOURS
- CMP DL,13
- JL NOT_PM
- SUB DL,12
- MOV POINTER,1
-
- NOT_PM: CMP DL,0
- JNZ NOT_ZERO_TIME
- MOV DL,12
- MOV POINTER,1
-
- NOT_ZERO_TIME: XOR DH,DH
- CMP DL,10
- JGE NOT_PAST10
- MOV AL,' '
- STOSB
-
- NOT_PAST10: CALL WRITE_DECIMAL
- MOV AL,':'
- STOSB
- MOV DL,MINUTES
- XOR DH,DH
- CMP DL,10
- JGE NOT_10_3
- MOV AL,'0'
- STOSB
-
- NOT_10_3: CALL WRITE_DECIMAL
- MOV AL,':'
- STOSB
- MOV DL,SECONDS
- XOR DH,DH
- CMP DL,10
- JGE NOT_10_4
- MOV AL,'0'
- STOSB
-
- NOT_10_4: CALL WRITE_DECIMAL
- MOV AL,' '
- STOSB
- MOV AL,'a'
- CMP POINTER,1
- JNZ NOT_PTR_1
- MOV AL,'p'
-
- NOT_PTR_1: STOSB
- MOV AX,VID_SEG
- MOV ES,AX ; sets up base to write to
- MOV DI,3978 ; sets up offset to write to
- MOV SI,OFFSET SCR_BUFFER ; sets up location to write from
- MOV CX,SCR_LEN ; counter for number of bytes to write (length of scr_buffer)
-
- OPT_TIME_SCREEN: MOVSB
- MOV AL,0F
- STOSB
- LOOP OPT_TIME_SCREEN
- MOV BUSY,0
-
- QUICK_EXIT: POPF
- POP ES,DS,DI,SI,DX,CX,BX,AX
- IRET
-
- WRITE_DECIMAL: PUSH AX
- PUSH BX
- PUSH CX
- PUSH DX
- MOV AX,DX
- MOV BX,10
- XOR CX,CX
-
- NEXT_COUNT: XOR DX,DX
- DIV BX
- PUSH DX
- INC CX
- OR AX,AX
- JNZ NEXT_COUNT
-
- FLOG_IT_BACK: POP AX
- ADD AL,'0'
- STOSB
- LOOP FLOG_IT_BACK
- POP DX
- POP CX
- POP BX
- POP AX
- RET
-
- INITIALIZE: MOV AH,0F
- INT 010
- CMP AL,07
- JNZ NOT_MONO
- MOV VID_SEG,0B000
-
- NOT_MONO: MOV AX,03528
- INT 021
- MOV OLD_INT_28,BX
- MOV OLD_INT_28_2,ES
- MOV AX,02528
- MOV DX,OFFSET GET_TIME
- INT 021
- MOV DX,OFFSET INITIALIZE
- INT 027
-